// app.js
App({
  globalData: {
    userInfo: null,
    role: null, // 'teacher' 或 'student'
    subjects: ['语文', '数学', '英语']
  },
  
  onLaunch() {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        env: 'cloud1-5gygjd0d0b242dc2', // 这里需要替换为您的云开发环境ID
        traceUser: true,
      });
    }
    
    // 获取用户信息
    this.getUserInfo();
    
    // 记录小程序版本信息
    const accountInfo = wx.getAccountInfoSync();
    this.globalData.version = accountInfo.miniProgram.version || '开发版';
    
    // 监听页面跳转失败事件
    this.handlePageNotFound();
  },
  
  // 处理页面不存在的情况
  handlePageNotFound() {
    wx.onPageNotFound(res => {
      console.error('页面不存在:', res.path);
      wx.showToast({
        title: '页面不存在',
        icon: 'none',
        duration: 2000
      });
      
      // 延迟返回上一页
      setTimeout(() => {
        wx.navigateBack({
          delta: 1
        });
      }, 1500);
    });
  },
  
  getUserInfo() {
    // 获取本地存储的用户信息
    const userInfo = wx.getStorageSync('userInfo');
    const role = wx.getStorageSync('userRole');
    
    if (userInfo) {
      this.globalData.userInfo = userInfo;
    }
    
    if (role) {
      this.globalData.role = role;
    }
  },
  
  // 设置用户角色
  setUserRole(role) {
    this.globalData.role = role;
    wx.setStorageSync('userRole', role);
  },
  
  // 统一封装导航方法，处理异常情况
  navigateTo(url, params = {}) {
    return new Promise((resolve, reject) => {
      try {
        // 处理参数
        let urlWithParams = url;
        if (Object.keys(params).length > 0) {
          const queryString = Object.keys(params)
            .map(key => `${key}=${encodeURIComponent(params[key])}`)
            .join('&');
          urlWithParams = `${url}?${queryString}`;
        }
        
        wx.navigateTo({
          url: urlWithParams,
          success: res => {
            console.log(`成功导航到: ${urlWithParams}`);
            resolve(res);
          },
          fail: err => {
            console.error(`导航失败: ${urlWithParams}`, err);
            
            // 尝试使用redirectTo
            wx.redirectTo({
              url: urlWithParams,
              success: res => {
                console.log(`成功重定向到: ${urlWithParams}`);
                resolve(res);
              },
              fail: redirectErr => {
                console.error(`重定向失败: ${urlWithParams}`, redirectErr);
                reject(redirectErr);
                
                wx.showToast({
                  title: '页面跳转失败',
                  icon: 'none'
                });
              }
            });
          }
        });
      } catch (error) {
        console.error('导航异常:', error);
        reject(error);
        
        wx.showToast({
          title: '系统错误',
          icon: 'none'
        });
      }
    });
  }
})
